<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Constructive solid geometry</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Constructive_solid_geometry"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/mediawiki.page.gallery.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Constructive_solid_geometry rootpage-Constructive_solid_geometry skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Constructive solid geometry</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p><b>Constructive solid geometry</b> (<b>CSG</b>; formerly called <b>computational binary solid geometry</b>) is a technique used in <a href="Solid_modeling" title="Solid modeling">solid modeling</a>. Constructive solid geometry allows a modeler to create a complex surface or object by using <a href="Boolean_data_type" title="Boolean data type">Boolean</a> <a href="Operator_(programming)" class="mw-redirect" title="Operator (programming)">operators</a> to combine simpler objects,<sup id="cite_ref-foley_1-0" class="reference"><a href="#cite_note-foley-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> potentially generating visually complex objects by combining a few primitive ones.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-bb_3-0" class="reference"><a href="#cite_note-bb-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p><p>In <a href="3D_computer_graphics" title="3D computer graphics">3D computer graphics</a> and <a href="Computer-aided_design" title="Computer-aided design">CAD</a>, CSG is often used in <a href="Procedural_modeling" title="Procedural modeling">procedural modeling</a>. CSG can also be performed on <a href="Polygon_mesh" title="Polygon mesh">polygonal meshes</a>, and may or may not be procedural and/or parametric.
</p><p>CSG can be contrasted with <a href="Polygon_mesh" title="Polygon mesh">polygon mesh</a> modeling and <a href="Box_modeling" title="Box modeling">box modeling</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Workings">Workings</h2></div>
<p>The simplest solid objects used for the representation are called <i><a href="Geometric_primitive" title="Geometric primitive">geometric primitives</a></i>. Typically they are the objects of simple shape: <a href="Cuboid" title="Cuboid">cuboids</a>, <a href="Cylinder_(geometry)" class="mw-redirect" title="Cylinder (geometry)">cylinders</a>, <a href="Prism_(geometry)" title="Prism (geometry)">prisms</a>, <a href="Pyramid_(geometry)" title="Pyramid (geometry)">pyramids</a>, <a href="Sphere" title="Sphere">spheres</a>, <a href="Cone_(geometry)" class="mw-redirect" title="Cone (geometry)">cones</a>.<sup id="cite_ref-foley_1-1" class="reference"><a href="#cite_note-foley-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> The set of allowable primitives is limited by each software package. Some software packages allow CSG on curved objects while other packages do not.
</p><p>An object is <i>constructed</i> from primitives by means of allowable <i>operations</i>, which are typically <a href="Boolean_algebra" title="Boolean algebra">Boolean</a> <a href="Operation_(mathematics)" title="Operation (mathematics)">operations</a> on <a href="Set_theory" title="Set theory">sets</a>: <a href="Union_(set_theory)" title="Union (set theory)">union</a> (OR), <a href="Intersection_(set_theory)" title="Intersection (set theory)">intersection</a> (AND) and <a href="Complement_(set_theory)" title="Complement (set theory)">difference</a> (NOT), as well as <a href="Geometric_transformation" title="Geometric transformation">geometric transformations</a> of those sets.<sup id="cite_ref-foley_1-2" class="reference"><a href="#cite_note-foley-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>A primitive can typically be described by a <a href="Algorithm" title="Algorithm">procedure</a> which accepts some number of <a href="Parameter" title="Parameter">parameters</a>; for example, a sphere may be described by the coordinates of its center point, along with a radius value. These primitives can be combined into compound objects using operations like these:
</p>
<ul class="gallery mw-gallery-traditional">
<li class="gallerybox" style="width: 155px">
<div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:File"></span></div>
<div class="gallerytext"><b>Union</b><br>Merger of two objects into one</div>
</li>
<li class="gallerybox" style="width: 155px">
<div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:File"></span></div>
<div class="gallerytext"><b>Difference</b><br>Subtraction of one object from another</div>
</li>
<li class="gallerybox" style="width: 155px">
<div class="thumb" style="width: 150px; height: 150px;"><span typeof="mw:File"></span></div>
<div class="gallerytext"><b>Intersection</b><br>Portion common to both objects</div>
</li>
</ul>
<p>Combining these elementary operations, it is possible to build up objects with high complexity starting from simple ones.
</p>
<div class="mw-heading mw-heading3"><h3 id="Ray_tracing">Ray tracing</h3></div>
<p>Rendering of constructive solid geometry is particularly simple when <a href="Ray_tracing_(graphics)" title="Ray tracing (graphics)">ray tracing</a>. Ray tracers intersect a ray with both primitives that are being operated on, apply the operator to the intersection intervals along the 1D ray, and then take the point closest to the camera along the ray as being the result.
</p>
<div class="mw-heading mw-heading2"><h2 id="Applications">Applications</h2></div>
<p>Constructive solid geometry has a number of practical uses. It is used in cases where simple geometric objects are desired, or where mathematical accuracy is important.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
Nearly all engineering CAD packages use CSG (where it may be useful for representing tool cuts, and features where parts must fit together).
</p><p>The <a href="Quake_engine" title="Quake engine"><i>Quake</i> engine</a> and <a href="Unreal_Engine" title="Unreal Engine">Unreal Engine</a> both use this system, as does <a href="Valve_Hammer_Editor" class="mw-redirect" title="Valve Hammer Editor">Hammer</a> (the native <a href="Source_engine" class="mw-redirect" title="Source engine">Source engine</a> level editor), and <a href="Torque_Game_Engine" class="mw-redirect" title="Torque Game Engine">Torque Game Engine</a>/<a href="Torque_Game_Engine_Advanced" class="mw-redirect" title="Torque Game Engine Advanced">Torque Game Engine Advanced</a>. CSG is popular because a modeler can use a set of relatively simple objects to create very complicated geometry.<sup id="cite_ref-bb_3-1" class="reference"><a href="#cite_note-bb-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> When CSG is procedural or parametric, the user can revise their complex geometry by changing the position of objects or by changing the Boolean operation used to combine those objects.
</p><p>One of the advantages of CSG is that it can easily assure that objects are "solid" or water-tight if all of the primitive shapes are water-tight.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> This can be important for some manufacturing or engineering computation applications. By comparison, when creating geometry based upon <a href="Boundary_representation" title="Boundary representation">boundary representations</a>, additional topological data is required, or consistency checks must be performed to assure that the given boundary description specifies a valid solid object.<sup id="cite_ref-foley_1-3" class="reference"><a href="#cite_note-foley-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>A convenient property of CSG shapes is that it is easy to classify arbitrary points as being either inside or outside the shape created by CSG. The point is simply classified against all the underlying primitives and the resulting boolean expression is evaluated.<sup id="cite_ref-rt_6-0" class="reference"><a href="#cite_note-rt-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> This is a desirable quality for some applications such as <a href="Ray_tracing_(graphics)" title="Ray tracing (graphics)">ray tracing</a>.<sup id="cite_ref-rt_6-1" class="reference"><a href="#cite_note-rt-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Conversion_from_meshes_to_CSG">Conversion from meshes to CSG</h2></div>
<p>With CSG models being parameterized by construction, they are often favorable over usual <a href="Polygon_mesh" title="Polygon mesh">meshes</a> when it comes to applications where the goal is to fabricate customized models. For such applications it can be interesting to convert already existing meshes to CSG trees. This problem of automatically converting meshes to CSG trees is called <b>inverse CSG</b>.
</p><p>A resulting CSG tree is required to occupy the same volume in 3D space as the input mesh while having a minimal number of nodes. Simple solutions are preferred to ensure that the resulting model is easy to edit.
Solving this problem is a challenge because of the large search space that has to be explored. It combines continuous parameters such as dimension and size of the primitive shapes, and discrete parameters such as the Boolean operators used to build the final CSG tree.
</p><p>Deductive methods solve this problem by building a set of <a href="Half-space_(geometry)" title="Half-space (geometry)">half-spaces</a> that describe the interior of the geometry. These half-spaces are used to describe primitives that can be combined to get the final model.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p><p>Another approach decouples the detection of primitive shapes and the computation of the CSG tree that defines the final model. This approach exploits the ability of modern <a href="Program_synthesis" title="Program synthesis">program synthesis</a> tools to find a CSG tree with minimal complexity.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p><p>There are also approaches that use <a href="Genetic_algorithm" title="Genetic algorithm">genetic algorithms</a> to iteratively optimize an initial shape towards the shape of the desired mesh.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Notable_applications_with_CSG_support">Notable applications with CSG support</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Generic_modelling_languages_and_software">Generic modelling languages and software</h3></div>
<ul><li><a href="HyperFun" title="HyperFun">HyperFun</a></li>
<li><a href="PLaSM" title="PLaSM">PLaSM</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Ray_tracing_and_particle_transport">Ray tracing and particle transport</h3></div>
<ul><li><a href="PhotoRealistic_RenderMan" class="mw-redirect" title="PhotoRealistic RenderMan">PhotoRealistic RenderMan</a></li>
<li><a href="POV-Ray" title="POV-Ray">POV-Ray</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Computer-aided_design">Computer-aided design</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">See also: <a href="CAD_software" class="mw-redirect" title="CAD software">CAD software</a></div>
<ul><li><a href="AutoCAD" title="AutoCAD">AutoCAD</a></li>
<li><a href="Autodesk_Inventor" title="Autodesk Inventor">Autodesk Inventor</a></li>
<li><a href="Autodesk_Fusion_360" class="mw-redirect" title="Autodesk Fusion 360">Autodesk Fusion 360</a></li>
<li><a href="BRL-CAD" title="BRL-CAD">BRL-CAD</a></li>
<li><a href="CATIA" title="CATIA">CATIA</a></li>
<li><a href="FreeCAD" title="FreeCAD">FreeCAD</a></li>
<li><a href="Siemens_NX" title="Siemens NX">NX CAD</a></li>
<li><a href="SolveSpace" title="SolveSpace">SolveSpace</a></li>
<li><a href="Onshape" title="Onshape">Onshape</a></li>
<li><a href="OpenSCAD" title="OpenSCAD">OpenSCAD</a></li>
<li><a href="PTC_Creo" title="PTC Creo">PTC Creo Parametric</a> (formerly known as <a href="Pro/Engineer" class="mw-redirect" title="Pro/Engineer">Pro/Engineer</a>)</li>
<li><a href="Realsoft_3D" title="Realsoft 3D">Realsoft 3D</a></li>
<li><a href="Rhino3D" class="mw-redirect" title="Rhino3D">Rhino</a></li>
<li><a href="Solid_Edge" title="Solid Edge">Solid Edge</a></li>
<li><a href="SolidWorks" title="SolidWorks">SolidWorks</a></li>
<li><a href="Tinkercad" title="Tinkercad">Tinkercad</a></li>
<li><a href="Vectorworks" title="Vectorworks">Vectorworks</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Gaming">Gaming</h3></div>
<ul><li><a href="Dreams_(video_game)" title="Dreams (video game)">Dreams</a></li>
<li><a href="Godot_(game_engine)" title="Godot (game engine)">Godot</a><sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup></li>
<li><a href="GtkRadiant" class="mw-redirect" title="GtkRadiant">GtkRadiant</a></li>
<li><a href="LittleBigPlanet" title="LittleBigPlanet">LittleBigPlanet</a></li>
<li><a href="Roblox" title="Roblox">Roblox</a></li>
<li><a href="Unity_(game_engine)" title="Unity (game engine)">Unity</a>, via free or paid plug-ins from the <a href="Unity_(game_engine)#Unity_Asset_Store" title="Unity (game engine)">Unity Asset Store</a>.</li>
<li><a href="UnrealEd" class="mw-redirect" title="UnrealEd">UnrealEd</a></li>
<li><a href="Valve_Hammer_Editor" class="mw-redirect" title="Valve Hammer Editor">Valve Hammer Editor</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Others">Others</h3></div>
<ul><li><a href="3Delight" title="3Delight">3Delight</a></li>
<li><a href="Aqsis" title="Aqsis">Aqsis</a> (as of version 0.6.0)<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Blender_(software)" title="Blender (software)">Blender</a> – primarily a surface mesh editor, but capable of simple CSG using meta objects and using the Boolean modifier on mesh objects.</li>
<li><a href="Clara.io" title="Clara.io">Clara.io</a></li>
<li><a href="Geant4" title="Geant4">Geant4</a></li>
<li>Magica CSG<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Monte_Carlo_N-Particle_Transport_Code" title="Monte Carlo N-Particle Transport Code">MCNP</a></li>
<li><a href="SketchUp" title="SketchUp">SketchUp</a></li>
<li>Womp<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-foley-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-foley_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-foley_1-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-foley_1-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-foley_1-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFFoley1996" class="citation cs2"><a href="James_D._Foley" title="James D. Foley">Foley, James D.</a> (1996), "12.7 Constructive Solid Geometry", <a rel="nofollow" class="external text" href="https://books.google.com/books?id=-4ngT05gmAQC&pg=PA557"><i>Computer Graphics: Principles and Practice</i></a>, Addison-Wesley Professional, pp. <span class="nowrap">557–</span>558, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9780201848403</bdi></cite>,</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFRoth1982" class="citation journal cs1">Roth, Scott (1982). "Ray Casting for Modeling Solids". <i>Computer Graphics and Image Processing</i>. <b>18</b> (2): <span class="nowrap">109–</span>144. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0146-664X%2882%2990169-1">10.1016/0146-664X(82)90169-1</a>.</cite></span>
</li>
<li id="cite_note-bb-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-bb_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-bb_3-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFBloomenthalBajaj1997" class="citation cs2">Bloomenthal, Jules; <a href="Chandrajit_Bajaj" title="Chandrajit Bajaj">Bajaj, Chandrajit</a> (1997), "5.2.5 Intersection with CSG Trees", <a rel="nofollow" class="external text" href="https://books.google.com/books?id=T3SSqIVnS4YC&pg=PA178"><i>Introduction to Implicit Surfaces</i></a>, Morgan Kaufmann, pp. <span class="nowrap">178–</span>180, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9781558602335</bdi></cite>.</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><a href="#CITEREFFoley1996">Foley (1996)</a>, p. 559.</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite id="CITEREFvan_RossenBaranowski2011" class="citation cs2">van Rossen, Sander; Baranowski, Matthew (2011), "Real-time constructive solid geometry", in Ansari, Marwan (ed.), <a rel="nofollow" class="external text" href="https://books.google.com/books?id=HKZuaUdmovsC&pg=PA79"><i>Game Development Tools</i></a>, CRC Press, pp. <span class="nowrap">79–</span>96, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9781439867723</bdi></cite>.</span>
</li>
<li id="cite_note-rt-6"><span class="mw-cite-backlink">^ <a href="#cite_ref-rt_6-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-rt_6-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFGlassner1989" class="citation cs2">Glassner, Andrew S. (1989), <a rel="nofollow" class="external text" href="https://books.google.com/books?id=YPblYyLqBM4C&pg=PA80"><i>An Introduction to Ray Tracing</i></a>, Morgan Kaufmann, p. 80, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9780122861604</bdi></cite>.</span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite id="CITEREFBucheleCrawford2004" class="citation journal cs1">Buchele, Suzanne F.; Crawford, Richard H. (2004). "Three-dimensional halfspace constructive solid geometry tree construction from implicit boundary representations". <i>Computer-Aided Design</i>. <b>36</b> (11): <span class="nowrap">1063–</span>1073. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.cad.2004.01.006">10.1016/j.cad.2004.01.006</a>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite id="CITEREFDuInalaPuSpielberg2018" class="citation journal cs1">Du, Tao; Inala, Jeevana Priya; Pu, Yewen; Spielberg, Andrew; Schulz, Adriana; Rus, Daniela; Solar-Lezama, Armando; Matusik, Wojciech (2018). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F3272127.3275006">"InverseCSG: automatic conversion of 3D models to CSG trees"</a>. <i>ACM Trans. Graph</i>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F3272127.3275006">10.1145/3272127.3275006</a></span>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite id="CITEREFFayollePasko2016" class="citation journal cs1">Fayolle, Pierre-Alain; Pasko, Alexander A. (2016). <a rel="nofollow" class="external text" href="http://eprints.bournemouth.ac.uk/23373/1/tree_recovery.pdf">"An evolutionary approach to the extraction of object construction trees from 3D point clouds"</a> <span class="cs1-format">(PDF)</span>. <i>Computer-Aided Design</i>. <b>74</b>: <span class="nowrap">1–</span>17. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.cad.2016.01.001">10.1016/j.cad.2016.01.001</a>.</cite></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://godotengine.org/article/godot-gets-csg-support">Godot Engine - Godot gets CSG support</a></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite id="CITEREFGregory2002" class="citation web cs1">Gregory, Paul (February 12, 2002). <a rel="nofollow" class="external text" href="https://sourceforge.net/p/aqsis/news/2002/02/major-release/">"Major release"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">May 20,</span> 2020</span> – via SourceForge.</cite></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://ephtracy.github.io/index.html?page=magicacsg">Magica CSG website</a></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://womp.com/index">Womp website</a></span>
</li>
</ol></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-20" href="https://en.wikipedia.org/wiki/?title=Constructive_solid_geometry&oldid=1301631591">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>